package config;

import com.itheima.customer.CustomerBeanNameGenerator;
import com.itheima.service.UserService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.stereotype.Service;

/**
 * spring的配置类 相当于applicationContext.xml 用于替代xml配置
 * <p>
 * 1 @Configuration不可以是final类型；
 * 2 @Configuration不可以是匿名类；
 * 3 嵌套的configuration必须是静态类。
 * 1.必须以类的形式提供配置类, 允许通过生成的子类进行运行时增强(Cglib动态代理)。
 * 2.配置类必须是non-final的 编译报错
 * 3.配置类必须是non-local的（即不能在方法中声明）(non-local是不是翻译成非局部的比较好
 * 可以使用第4个约束的代码对 AppConfigAux 的访问级别修改成private试一试,会报错的, 这一步的测试体现该类不能是private级别。
 * 不能在方法中声明 表示的是不能是局部内部类)
 * 4.必须将任何嵌套配置类声明为static。（不声明也可以正常使用？声明为静态是为了隔离-静态类行为上和顶层的类相似，不能访问外部类的成员，只能访问静态成员）
 * 5.@Bean方法可能不会反过来创建进一步的配置类（任何此类实例都将被视为常规bean，其配置注释仍未被检测到）。
 *
 * @author 黑马程序员 *
 * @Company http://www.itheima.com
 */
@Configuration
//@ComponentScan(nameGenerator = CustomerBeanNameGenerator.class) //默认配置类SpringConfiguration的包及其子包，
// 加了basePackages或basePackageClasses如果不是配置类SpringConfiguration所在包及其子包
// 默认也会加载配置类SpringConfiguration的包及其子包
//includeFilters单独起作用必须用useDefaultFilters = false 默认是true 回加载 @Component @Repository @Service @Controller注解
@ComponentScan(basePackages = "com.itheima",lazyInit = true)

//@ComponentScan(basePackages = "com.itheima"
//        ,nameGenerator = CustomerBeanNameGenerator.class
//        ,useDefaultFilters = false
//        ,includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,value = Service.class))
//@ComponentScan(basePackages = "com.itheima"
//        ,nameGenerator = CustomerBeanNameGenerator.class
//        ,lazyInit = true
//        ,excludeFilters =  @ComponentScan.Filter(type = FilterType.ANNOTATION,value = Service.class))
//@ComponentScan(basePackages = "com.itheima",nameGenerator = CustomerBeanNameGenerator.class,resourcePattern = "*/*.class")
//@ComponentScan(basePackageClasses = UserService.class,nameGenerator = CustomerBeanNameGenerator.class)
public class SpringConfiguration {

}
